The nearly ubiquitous adoption of computers has spawned a wide variety of application programs. The advent of the Internet and World Wide Web have resulted in the wide spread development of application programs operable upon various computing platforms. For example, browsers have been developed to execute or run upon various computing platforms, such as operating under control of the WINDOWS, UNIX, and MAC OS operating systems, to facilitate execution or running of Internet application programs. Such Internet application programs have often been developed using declarative code, such as using hypertext markup language (HTML), in order to facilitate operation on various computing platforms, communication via the Internet, operation in server/client environments, et cetera. The aforementioned declarative code describes what something is and thus is used to expressly define application program objects, such as a Web page to be displayed by the Internet application program. Most of the logic of such Web applications happens on the server. Accordingly, every time something needs to happen in the Web application, a server request is made in the form of a URL, and another page is returned, containing declarative markup.
This page-based model has its advantages. For example, if communications are interrupted during operation of the application program, the current condition of the application program may be readily reestablished using the declarative code for the current condition, such as by invoking a “refresh” command as is often available using the aforementioned browsers. Likewise, if a user wishes to return to a previous condition, the previous condition may be reestablished using the declarative code for the previous condition, such as by invoking a “back” command as is often available using the aforementioned browsers. If a user wishes to share a particular program condition with another user, a link to that condition, such as in the form of a uniform resource locator (URL), may be obtained and provided to a compatriot.
However, the page-based model is not without disadvantage. For example, each time a page is changed the previous page is discarded and a new page is loaded. Accordingly, a developer must fully describe each page using the declarative language, which results in duplicated code, adds network bandwidth demand, and can be hard to maintain. Moreover, page based application architecture using declarative-code makes it difficult to provide smooth animations and the level of polish expected from traditional applications.
Desktop application programs, such as application programs developed without regard to the ability to operate on different computing platforms and/or using client/server environments, often utilize imperative code. Such imperative code provides a set of instructions setting forth logic to provide desired operation as the application program flow progresses. Such procedural code provides a more robust programming environment, allowing for greater flexibility in developing application programs. Moreover, such imperative code results in efficiencies for the developer because the developer is not forced to describe each object and redescribe each object, even those which remain unchanged, as various program conditions are transitioned.
Some application programs have been developed which are a hybrid of the foregoing. For example, application programs have been developed using declarative code to describe particular program conditions and imperative code to execute program flow logic beyond the defined program conditions in order to provide robust application programs for use on multiple computing platforms, for a client/server environment, and/or adapted for Internet or other networking configurations. Application programs developed using FLEX, available from Macromedia, San Francisco Calif., provide examples of application programs employing imperative code which are operable over the Internet in a browser environment.
Although providing robust features and programming efficiencies for a developer, recovering from an anomalous flow interruption might require returning to a beginning of the application program flow rather than “refreshing” the current condition or going “back” to a previous condition. Similarly, sharing a link to a particular condition within the flow of the application program.